<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');

require_once APPPATH . 'controllers/admin.php';

/**
 * Контроллер создания и изменения шаблона
 *
 * @package CoreFramework
 * @version 1.0
 * @author Gennadiy Kozlenko
 */
class Admin_Update_Template extends Admin {
   
   /**
    * Идентификатор шаблона
    *
    * @access private
    * @var integer
    */
   var $_id_template = 0;
   
   /**
    * Конструктор класса
    *
    * @access public
    * @return Admin_Update_Template
    */
   function Admin_Update_Template() {
      parent::Admin();
      // Выковыриваем идентификатор контента
      if (false !== $this->input->get('id')) {
         $this->_id_template = (int) $this->input->get('id');
      }
      $this->set_menu(4, 3);
      // Подгружаем модельку
      $this->load->model('m_template');
      $this->m_template->set_id($this->_id_template);
   } // end Admin_Update_Template
   
   /**
    * Метод по умолчанию
    *
    * @access public
    */
   function index() {
      $data = array();
      // Стандартные поля
      $name = $this->m_template->get('name');
      $content = $this->m_template->get('content');
      $styles = $this->m_template->get_styles();
      // Валидируем и, если нужно, изменяем шаблон
      if (false !== $this->input->post('edit')) {
         $this->load->library('validation');
         $rules = array(
            'template_name' => 'trim|required',
            'content'       => 'trim',
         );
         $this->validation->set_rules($rules);
         $result = $this->validation->run();
         // Получаем из поста поля
         $name = $this->validation->template_name;
         if (isset($this->validation->content)) {
            $content = $this->validation->content;
         } else {
            $content = '';
         }
         if (false !== $this->input->post('styles') && is_array($this->input->post('styles'))) {
            $styles = $this->input->post('styles');
         }
         if ($result) {
            // Если проверки пройдены успешно, изменяем шаблон
            $this->m_template->set('name', $name);
            $this->m_template->set('content', $content);
            $this->m_template->set_styles($styles);
            // Сохраняем в базу
            if ($this->m_template->update()) {
               if (0 == $this->_id_template) {
                  $this->set_message($this->lang->line('add_template_succ'), 'info', true);
               } else {
                  $this->set_message($this->lang->line('edit_template_succ'), 'info', true);
               }
               $this->redirect('admin_manage_templates');
            }
            // Если сюда пришли, значит не все в порядке...
            if (0 == $this->_id_template) {
               $this->set_message($this->lang->line('add_template_error'), 'error');
            } else {
               $this->set_message($this->lang->line('edit_template_error'), 'error');
            }
         }
      } else {
         // Если создается новый шаблон, используем page layout как шаблон
         if (0 == $this->_id_template) {
            $this->load->helper('file');
            $content = read_file(APPPATH . 'views/' . $this->config->item('language') . '/layouts/default.html');
            $match = array();
            if (preg_match('~<body[^>]*>(.*)</body>~msi', $content, $match)) {
               $content = $match[1];
            }
         }
      }
      // Получаем список стилей
      $all_styles = array();
      $this->load->model('m_table');
      $this->m_table->set_table('styles');
      $this->m_table->load_results();
      foreach ($this->m_table->get_results() as $result) {
         $item = array(
            'id_style' => $result['id_style'],
            'name'     => htmlspecialchars($result['name']),
            'checked'  => in_array($result['id_style'], $styles) ? 'checked="checked" ' : ''
         );
         array_push($all_styles, $item);
      }
      
      // Забиваем в дату поля
      $data['styles'] = $all_styles;
      $data['id_template'] = $this->_id_template;
      $data['name'] = htmlspecialchars($name);
      // Защищаем специальные теги
      $content = str_replace(array('{%', '%}'), array('{-%', '%-}'), $content);
      $data['content'] = htmlspecialchars($content);
      // Выводим
      $view = 'admin/edit_template.html';
      if (0 == $this->_id_template) {
         $view = 'admin/add_template.html';
      }
      $this->set_content($this->parser->parse($view, $data, true));
      $this->display();
   } // end index
   
}
